<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
    <style></style>
  </head>
  <body>
    <div>Generator(生成器函数)异步方案(上)</div>
    <script>
      //创建一个生成器函数
      function* foo() {
        console.log("start");
      }
      //调用时并不会立即执行，而是得到一个生成器对象
      const generator = foo();
      //手动调用才会执行,此时打印console
      generator.next();

      //   ====================
      function* foo2() {
        try {
          //也可以通过yield关键字向外传递值,yield关键字可以暂停生成器执行,在下一次next方法才会继续执行
          const res = yield "foo";
          // 由于下面通过generator2.next("bar")传入参数, 所以res为bar;
          console.log(res);
        } catch (e) {
          console.log(e);
        }
      }
      const generator2 = foo2();
      const result = generator2.next();
      console.log(result);
      //{value:'foo',done:false}

      generator2.next("bar"); //继续执行field后面
      //也可以传入参数替换yield关键字的参数，此时关键子yield的参数变为bar
      generator2.throw(new Error("error"));
    </script>
  </body>
</html>
